package coba.calendar;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.liferay.portal.kernel.exception.SystemException;

import coba.model.Guia;
import coba.model.Itinerario;
import coba.model.ItinerarioRecorrido;
import coba.model.LicenciaGuia;
import coba.model.Recorrido;
import coba.model.Solicitud;
import coba.model.SolicitudGuia;
import coba.service.ItinerarioLocalServiceUtil;
import coba.service.SolicitudGuiaLocalServiceUtil;

public class DisponibilidadGuias {

	public static long get(List<Solicitud> listSolicitud, int anio, int mes, int dia,
			List<Guia> listGuia,
			List<LicenciaGuia> listLicenciaGuia) throws SystemException {

		Calendar cal = new GregorianCalendar(anio, mes, dia, 0, 0, 0);
		Date fecha = cal.getTime();
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
		cal.add(Calendar.DATE, -1);
		Date fecha1 = cal.getTime();
				
		Set<Long> setGuiaId = new HashSet<Long>();
		
		for (Guia guia : listGuia) {
			if (guia.getFechaInicio().compareTo(fecha) <= 0 &&
					(guia.getFechaFin() == null || guia.getFechaFin().compareTo(fecha1) > 0) &&
					guia.getDias().indexOf(String.valueOf(dayOfWeek)) > -1) {
				setGuiaId.add(guia.getGuiaId());
			}
		}
		
		for (LicenciaGuia licencia : listLicenciaGuia) {
			if (licencia.getFechaDesde().compareTo(fecha) <= 0 &&
					licencia.getFechaHasta().compareTo(fecha1) > 0) {
				setGuiaId.remove(licencia.getGuiaId());
			}
		}		
		
		long cantidadGuias = setGuiaId.size();
		
		for (Solicitud solicitud : listSolicitud) {
			if (solicitud.getFechaItinerario() == null)
				continue;
			
			Calendar cal2 = GregorianCalendar.getInstance();
			cal2.setTime(solicitud.getFechaItinerario());

			if (cal2.get(Calendar.YEAR) == anio && cal2.get(Calendar.MONTH) == mes
					&& cal2.get(Calendar.DAY_OF_MONTH) == dia) {
				cantidadGuias -= SolicitudGuiaLocalServiceUtil.countBySolicitudId(solicitud.getId());
			}
		}
		
		return cantidadGuias;
		
	}

}
